package com.lcf.order.controller;

import com.lcf.order.VO.ResultVo;
import com.lcf.order.client.ProductClient;
import com.lcf.order.dto.CartDTO;
import com.lcf.order.entity.ProductInfo;
import com.lcf.order.utils.ResultVoUtils;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;

@RestController
public class TestThirdClientController {

//    @Autowired
//    private LoadBalancerClient loadBalancerClient;

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private ProductClient productClient;

    @GetMapping("/getProductMsg")
    public ResultVo<Map<String, String>> getProductMsg() {

        //第一种方式，使用RestTemplate，url写死
//        RestTemplate restTemplate = new RestTemplate();
//        String response = restTemplate.getForObject("http://localhost:8090/msg", String.class);

        //第二种方式（使用LoadBalancerClient获取应用名，然后使用restTemplate调用接口）
//        RestTemplate restTemplate2 = new RestTemplate();
//        ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCTINFO");
//        String url = String.format("http://%s:%s/msg", serviceInstance.getHost(), serviceInstance.getPort());
//        String response2 = restTemplate2.getForObject(url, String.class);

        //第三种方式(使用@LoadBalanced注解，可以使用应用名访问,其实就是第二种方式的注解版)
        /**
         *      @Bean
         *     @LoadBalanced
         *     public RestTemplate restTemplate() {
         *         return new RestTemplate();
         *     }
         */
//        String response2 = restTemplate.getForObject("http://PRODUCTINFO/msg", String.class);

        //第四种方式 feign
//        String response3 = productClient.productMsg();
        List<ProductInfo> productInfos = productClient.productListForOrder(Arrays.asList("111"));
        return ResultVoUtils.success(productInfos);
    }


    /**
     * 测试扣库存
     *
     * @return
     */
    @GetMapping("/productDecreaseStock")
    public ResultVo<Map<String, String>> productDecreaseStock() {
        CartDTO cartDTO = new CartDTO("111", 30);

        productClient.productDecreaseStock(Arrays.asList(cartDTO));
        return ResultVoUtils.success("ok");
    }

}
